{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "# 基本数据类型与内置方法"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "---\n",
    "## 数字"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1052673.0\n",
      "0x1.599999999999ap+2\n",
      "False\n",
      "(3039929748475085, 562949953421312)\n",
      "(3039929748475085, 562949953421312)\n",
      "(27, 5)\n",
      "5.0\n",
      "3.0\n",
      "(3-5j)\n",
      "(-16+30j)\n"
     ]
    }
   ],
   "source": [
    "from decimal import *\n",
    "num=5.4\n",
    "print(num.fromhex('101001'))\n",
    "print(num.hex())\n",
    "print(num.is_integer())\n",
    "print(num.as_integer_ratio()) #将数字化成整数相除（分数）形式，返回一个分子，一个分母\n",
    "print(num.as_integer_ratio()) #将数字化成整数相除（分数）形式，返回一个分子，一个分母\n",
    "num=Decimal('5.4')\n",
    "print(num.as_integer_ratio()) #将数字化成整数相除（分数）形式，返回一个分子，一个分母\n",
    "\n",
    "num=3+5j\n",
    "print(num.imag)\n",
    "print(num.real)\n",
    "print(num.conjugate())\n",
    "print(num**2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 列表\n",
    "* 元素可重复\n",
    "* 按顺序，可按下标索引\n",
    "* 索引元素可被修改"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "添加与移除append-pop，insert-remove,clear\n",
      "xiaohong\n",
      "xiaoH\n",
      "['xiaoming', 'xiaoH', 'xiaolan', 1]\n",
      "1\n",
      "['xiaoming', 'xiaoH', 'xiaolan']\n",
      "['xiaoming', 'xiaozi', 'xiaoH', 'xiaolan']\n",
      "['xiaoming', 'xiaoH', 'xiaolan']\n",
      "[]\n"
     ]
    }
   ],
   "source": [
    "print(\"添加与移除append-pop，insert-remove,clear\")\n",
    "names=[\"xiaoming\",\"xiaohong\",\"xiaolan\"]\n",
    "print(names[1])\n",
    "names[1]=\"xiaoH\"\n",
    "print(names[1])\n",
    "names.append(1)\n",
    "print(names)\n",
    "print(names.pop())\n",
    "print(names)\n",
    "names.insert(1,\"xiaozi\")\n",
    "print(names)\n",
    "names.remove(\"xiaozi\")\n",
    "print(names)\n",
    "names.clear()\n",
    "print(names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['xiaoming', 'xiaohong', 'xiaolan', 1]\n",
      "['xiaoming', 'xiaohong', 'xiaolan']\n",
      "['xiaoming', 'xiaohong', 'xiaolan', 1]\n"
     ]
    }
   ],
   "source": [
    "names=[\"xiaoming\",\"xiaohong\",\"xiaolan\"]\n",
    "names_c=names\n",
    "names_c.append(1)\n",
    "\n",
    "print(names_c)\n",
    "names=[\"xiaoming\",\"xiaohong\",\"xiaolan\"]\n",
    "names_c=names.copy()\n",
    "names_c.append(1)\n",
    "print(names)\n",
    "print(names_c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "元素计数count与元素下标index\n",
      "1\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "print(\"元素计数count与元素下标index\")\n",
    "names=[\"xiaoming\",\"xiaohong\",\"xiaolan\",\"xiaolan\"]\n",
    "print(names.count(\"xiaoming\"))\n",
    "print(names.index(\"xiaolan\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['xiaolan', 'xiaohong', 'xiaoming']\n",
      "['xiaohong', 'xiaolan', 'xiaoming']\n",
      "['xiaolan', 'xiaohong', 'xiaoming']\n",
      "['xiaohong', 'xiaolan', 'xiaoming']\n"
     ]
    }
   ],
   "source": [
    "names=[\"xiaoming\",\"xiaohong\",\"xiaolan\"]\n",
    "names.reverse()\n",
    "print(names)\n",
    "print(sorted(names))\n",
    "print(names)\n",
    "names.sort()\n",
    "print(names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 元组\n",
    "* 元素可重复\n",
    "* 按顺序，可按下标索引\n",
    "* 索引元素不可被修改"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "xiaolan\n",
      "2\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "names=(\"xiaoming\",\"xiaohong\",\"xiaolan\",\"xiaolan\")\n",
    "print(names[2])\n",
    "print(names.count(\"xiaolan\"))\n",
    "print(names.index(\"xiaolan\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 集合\n",
    "* 元素不可重复\n",
    "* 不按顺序，不可按下标索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "添加元素add、update\n",
      "{'1', '2', 4, '3'}\n",
      "{4, '3', '5', '1', '4', '2'} \n",
      "\n",
      "删除元素discard、remove、pop、clear\n",
      "{4, '3', '5', '1', '4'}\n",
      "{4, '5', '1', '4'}\n",
      "{'5', '1', '4'}\n",
      "set() \n",
      "\n",
      "直接赋值与拷贝\n",
      "{'1', '4', '2', '3'} {'1', '4', '2', '3'} \n",
      "\n",
      "{'1', '4', '2', '3'} {'1', '2', '3'} \n",
      "\n",
      "并集union\n",
      "{'1', '4', '3', '2'}\n",
      "{'1', '2', '3'}\n",
      "差集difference\n",
      "{'4'}\n",
      "{'4', '3'}\n",
      "{'4'} \n",
      "\n",
      "交集intersection\n",
      "{'3'}\n",
      "{'4', '3'}\n",
      "{'3'} \n",
      "\n",
      "交集的补集symmetric_difference\n",
      "{'1', '4', '2'}\n",
      "{'4', '3'}\n",
      "{'1', '4', '2'} \n",
      "\n",
      "判断是否 无交集isdisjoint\n",
      "False\n",
      "判断是否 为参数的子集issubset\n",
      "False\n",
      "判断是否 为参数的父集issuperset\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "print(\"添加元素add、update\")\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names.add(4) #添加不可变数据类型，比如整型、浮点型、元组、字符串\n",
    "print(names)\n",
    "names.update([\"2\",\"4\",\"5\"]) #添加可迭代的数据类型，比如列表、元组、字符串、集合、字典（整型、浮点型不可以）\n",
    "print(names,'\\n')\n",
    "\n",
    "print(\"删除元素discard、remove、pop、clear\")\n",
    "names.discard(\"2\") #删除集合中指定的元素\n",
    "print(names)\n",
    "names.remove(\"3\") #使用discard和remove都可以删除set当中的元素，区别就是remove的元素在set当中没有的话会报错，而discard不会\n",
    "print(names)\n",
    "names.pop() #随机移除元素\n",
    "print(names)\n",
    "names.clear()\n",
    "print(names,'\\n')\n",
    "\n",
    "print(\"直接赋值与拷贝\")\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names_c=names\n",
    "names_c.add(\"4\")\n",
    "print(names_c,names,'\\n')\n",
    "\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names_c=names.copy()\n",
    "names_c.add(\"4\")\n",
    "print(names_c,names,'\\n')\n",
    "\n",
    "print(\"并集union\")\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names_c={\"3\",\"4\"}\n",
    "print(names.union(names_c)) #返回并集\n",
    "print(names)\n",
    "\n",
    "print(\"差集difference\")\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names_c={\"3\",\"4\"}\n",
    "print(names_c.difference(names)) #集合names_c减去names得到的差集,差集做返回值\n",
    "print(names_c)\n",
    "names_c.difference_update(names) #差集作为names_c\n",
    "print(names_c,'\\n')\n",
    "\n",
    "print(\"交集intersection\")\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names_c={\"3\",\"4\"}\n",
    "print(names_c.intersection(names)) #返回集合的交集\n",
    "print(names_c)\n",
    "names_c.intersection_update(names) #交集作为names_c\n",
    "print(names_c,'\\n')\n",
    "\n",
    "print(\"交集的补集symmetric_difference\")\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names_c={\"3\",\"4\"}\n",
    "print(names_c.symmetric_difference(names)) #返回集合的交集的补集\n",
    "print(names_c)\n",
    "names_c.symmetric_difference_update(names) #交集的补集作为names_c\n",
    "print(names_c,'\\n')\n",
    "\n",
    "names={\"1\",\"2\",\"3\"}\n",
    "names_c={\"3\"}\n",
    "print(\"判断是否 无交集isdisjoint\")\n",
    "print(names.isdisjoint(names_c))\n",
    "\n",
    "print(\"判断是否 为参数的子集issubset\")\n",
    "print(names.issubset(names_c))\n",
    "\n",
    "print(\"判断是否 为参数的父集issuperset\")\n",
    "print(names.issuperset(names_c))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 字典\n",
    "* 元素key不可重复，value可重复\n",
    "* 按顺序，可按key索引\n",
    "* 索引元素可被修改"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "4\n",
      "{'xiaoming': 1, 'xiaohong': 2, 'xiaolan': 4, 'xiaozi': 2}\n",
      "2\n",
      "{'xiaoming': 1, 'xiaohong': 2, 'xiaolan': 4}\n",
      "{'xiaoming': 1, 'xiaohong': 1, 'xiaolan': 4, 'xiaozi': 2}\n",
      "('xiaozi', 2)\n",
      "{'xiaoming': 1, 'xiaohong': 1, 'xiaolan': 4} \n",
      "\n",
      "{'xiaoming': None, 'xiaohong': None, 'xiaolan': None}\n",
      "{'xiaoming': 10, 'xiaohong': 10, 'xiaolan': 10}\n",
      "{'xiaoming': 1, 'xiaohong': 1, 'xiaolan': 4}\n"
     ]
    }
   ],
   "source": [
    "name_age={\"xiaoming\":1,\"xiaohong\":2,\"xiaolan\":3}\n",
    "print(name_age[\"xiaolan\"])\n",
    "name_age[\"xiaolan\"]=4\n",
    "print(name_age[\"xiaolan\"])\n",
    "name_age.update({\"xiaozi\":2})\n",
    "print(name_age)\n",
    "print(name_age.pop(\"xiaozi\")) #返回value\n",
    "print(name_age)\n",
    "name_age.update({\"xiaohong\":1,\"xiaozi\":2}) #key的唯一性\n",
    "print(name_age)\n",
    "print(name_age.popitem()) #返回dict\n",
    "print(name_age,'\\n')\n",
    "\n",
    "seq=[\"xiaoming\",\"xiaohong\",\"xiaolan\",\"xiaolan\"]\n",
    "print(name_age.fromkeys(seq))\n",
    "seq=[\"xiaoming\",\"xiaohong\",\"xiaolan\",\"xiaolan\"]\n",
    "print(name_age.fromkeys(seq,10))\n",
    "print(name_age)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<function dict.setdefault(key, default=None, /)>"
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name_age.setdefault"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['xiaoming', 'xiaohong', 'xiaolan'])\n",
      "dict_values([1, 1, 4])\n",
      "dict_items([('xiaoming', 1), ('xiaohong', 1), ('xiaolan', 4)])\n",
      "None\n",
      "4\n"
     ]
    }
   ],
   "source": [
    "print(name_age.keys())\n",
    "print(name_age.values())\n",
    "print(name_age.items())\n",
    "print(name_age.get(\"xiaozi\"))\n",
    "print(name_age.get(\"xiaolan\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "{'xiaoming': 1, 'xiaohong': 1, 'xiaolan': 4, 'xiaozi': 2}\n",
      "2\n",
      "{'xiaoming': 1, 'xiaohong': 1, 'xiaolan': 4, 'xiaozi': 2}\n",
      "2\n",
      "None\n",
      "2\n",
      "None\n",
      "{'xiaoming': 1, 'xiaohong': 1, 'xiaolan': 4, 'xiaozi': None}\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "print(name_age.setdefault(\"xiaozi\",2))\n",
    "print(name_age)\n",
    "print(name_age.setdefault(\"xiaozi\",1))\n",
    "print(name_age)\n",
    "print(name_age.get(\"xiaozi\"))\n",
    "print(name_age.get(\"xiao\"))\n",
    "print(name_age.pop(\"xiaozi\"))\n",
    "print(name_age.setdefault(\"xiaozi\"))\n",
    "print(name_age)\n",
    "print(name_age.pop(\"xiaozi\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 字符串\n",
    "* 元素可重复\n",
    "* 按顺序，可按下标索引\n",
    "* 索引元素不可被修改* 元素可重复"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a\n",
      "Ada lovelace ß\n",
      "Ada Lovelace Ss\n",
      "ADA LOVELACE SS\n",
      "ada lovelace ß\n",
      "ADA LOVElace SS\n",
      "ada lovelace ss \n",
      "\n",
      "--**ada lovelace**--\n",
      "**ada lovelace**----\n",
      "----**ada lovelace** \n",
      " \n",
      "\n",
      "ada lovelace**\n",
      "**ada lovelace\n",
      "ada lovelace \n",
      "\n",
      "0000**ada lovelace** \n",
      "\n",
      "ada\tlovelace\n",
      "ada     lovelace\n"
     ]
    }
   ],
   "source": [
    "name=\"ada loveLACE ß\"\n",
    "print(name[2])\n",
    "print(name.capitalize())\n",
    "print(name.title())\n",
    "print(name.upper())\n",
    "print(name.lower()) #全改为小写，只适配ASCII\n",
    "print(name.swapcase())\n",
    "print(name.casefold(),'\\n') #也是全改为小写，适配的语言更多\n",
    "\n",
    "name=\"**ada lovelace**\"\n",
    "print(name.center(20,'-'))\n",
    "print(name.ljust(20,'-'))\n",
    "print(name.rjust(20,'-'),'\\n','\\n')\n",
    "\n",
    "print(name.lstrip('*'))\n",
    "print(name.rstrip('*'))\n",
    "print(name.strip('*'),'\\n')\n",
    "\n",
    "print(name.zfill(20),'\\n')\n",
    "\n",
    "name=\"ada\\tlovelace\"\n",
    "print(name)\n",
    "print(name.expandtabs()) #将tab转化为空格"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4\n",
      "0\n",
      "0\n",
      "13\n",
      "13\n",
      "21\n"
     ]
    }
   ],
   "source": [
    "name=\"lovelace ada lovelace\"\n",
    "print(name.count('a'))\n",
    "print(name.find('love')) #返回索引,不会报错\n",
    "print(name.index('love')) #返回索引,找不到会报错\n",
    "print(name.rfind('love'))\n",
    "print(name.rindex('love'))\n",
    "print(len(name))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0:2]endswith 'a': False\n",
      "[1:3]endswith 'a': True\n",
      "[0:2]startswith 'a': True\n",
      "[1:3]startswith 'a': False\n",
      "istitle: False\n",
      "islower: True\n",
      "isupper: False\n",
      "isalnum: False\n",
      "isalpha: False\n",
      "isspace: False \n",
      "\n",
      "isdigit: False\n",
      "isnumeric: False\n",
      "isdecimal: False \n",
      "\n",
      "isidentifier: False\n",
      "isprintable: True\n",
      "isascii: True\n"
     ]
    }
   ],
   "source": [
    "name=\"ada lovelace\"\n",
    "print(\"[0:2]endswith 'a':\",name.endswith('a',0,2))\n",
    "print(\"[1:3]endswith 'a':\",name.endswith('a',1,3))\n",
    "print(\"[0:2]startswith 'a':\",name.startswith('a',0,2))\n",
    "print(\"[1:3]startswith 'a':\",name.startswith('a',1,3))\n",
    "print(\"istitle:\",name.istitle()) #单词首字母大写的\n",
    "print(\"islower:\",name.islower()) #至少一个区分大小写的字符，并且所有这些(区分大小写的)字符都是 小写\n",
    "print(\"isupper:\",name.isupper()) #至少一个区分大小写的字符，并且所有这些(区分大小写的)字符都是 大写\n",
    "print(\"isalnum:\",name.isalnum()) #至少有一个字符并且所有字符都是 字母或数字\n",
    "print(\"isalpha:\",name.isalpha()) #至少有一个字符并且所有字符都是 字母或中文字\n",
    "print(\"isspace:\",name.isspace(),'\\n') #字符串中只包含空白\n",
    "\n",
    "print(\"isdigit:\",name.isdigit()) #只包含数字（Unicode数字，byte数字（单字节），全角数字（双字节），罗马数字）\n",
    "print(\"isnumeric:\",name.isnumeric()) #只包含数字（Unicode数字，全角数字（双字节），罗马数字，汉字数字）\n",
    "print(\"isdecimal:\",name.isdecimal(),'\\n') #检查字符串是否只包含十进制字符。这种方法只存在于unicode对象（Unicode数字，，全角数字（双字节））\n",
    "\n",
    "\n",
    "num = \"1\"  #unicode\n",
    "num.isdigit()   # True\n",
    "num.isdecimal() # True\n",
    "num.isnumeric() # True\n",
    " \n",
    "num = \"1\" # 全角\n",
    "num.isdigit()   # True\n",
    "num.isdecimal() # True\n",
    "num.isnumeric() # True\n",
    " \n",
    "num = b\"1\" # byte\n",
    "num.isdigit()   # True\n",
    "# num.isdecimal() # AttributeError 'bytes' object has no attribute 'isdecimal'\n",
    "# num.isnumeric() # AttributeError 'bytes' object has no attribute 'isnumeric'\n",
    " \n",
    "num = \"IV\" # 罗马数字\n",
    "num.isdigit()   # True\n",
    "num.isdecimal() # False\n",
    "num.isnumeric() # True\n",
    " \n",
    "num = \"四\" # 汉字\n",
    "num.isdigit()   # False\n",
    "num.isdecimal() # False\n",
    "num.isnumeric() # True\n",
    "\n",
    "\n",
    "print(\"isidentifier:\",name.isidentifier()) #是有效标识符\n",
    "print(\"isprintable:\",name.isprintable()) #所有字符都是可打印的，不可打印的字符可以是回车和换行符\n",
    "print(\"isascii:\",name.isascii()) #为空或字符串中的所有字符都是 ASCII"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 ada lovelace 2 ada lovelace 3 ada lovelace 4 \n",
      "\n",
      "['ada', 'lovelace', 'ada', 'lovelace']\n",
      "['', 'd', '\\tlovel', 'ce\\n', 'd', ' lovel', 'ce']\n",
      "['', 'd', '\\tlovelace\\nada lovelace']\n",
      "['ada\\tlovelace', 'ada lovelace'] \n",
      "\n",
      "('', 'a', 'da\\tlovelace\\nada lovelace')\n",
      "('ada\\tlovelace\\nada lovel', 'a', 'ce') \n",
      "\n",
      "odo loveloce\n",
      "odo lovelace \n",
      "\n",
      "{97: 49, 101: 50, 105: 51, 111: 52, 117: 53}\n",
      "1d1 l4v2l1c2\n"
     ]
    }
   ],
   "source": [
    "name=\" ada lovelace \"\n",
    "seq=[\"1\",\"2\",\"3\",\"4\"]\n",
    "print(name.join(seq),'\\n')\n",
    "\n",
    "name=\"ada\\tlovelace\\nada lovelace\"\n",
    "print(name.split()) #照分隔符(' ', '\\t', '\\r', '\\r\\n', \\n')分隔\n",
    "print(name.split('a'))\n",
    "print(name.split('a',2))\n",
    "print(name.splitlines(),'\\n') #照行('\\r', '\\r\\n', \\n')分隔\n",
    "\n",
    "name=\"ada\\tlovelace\\nada lovelace\"\n",
    "print(name.partition('a')) #如果字符串包含指定的分隔符，则返回一个3元的元组，第一个为分隔符左边的子串，第二个为分隔符本身，第三个为分隔符右边的子串\n",
    "print(name.rpartition('a'),'\\n')\n",
    "\n",
    "name=\"ada lovelace\"\n",
    "print(name.replace('a','o',))\n",
    "print(name.replace('a','o',2),'\\n')\n",
    "\n",
    "trantab=name.maketrans(\"aeiou\",\"12345\") #生成字符映射表\n",
    "print(trantab)\n",
    "print(name.translate(trantab)) #通过表进行字符映射"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python[conda env:torch38]",
   "language": "python",
   "name": "torch38"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}